<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

namespace Common\Api;
class UserApi {
	/**
	 * 检测用户是否登录
	 * @return integer 0-未登录，大于0-当前登录用户ID
	 */
	public static function is_login() {
		$user = session('user_auth');
		if (empty($user)) {
			return 0;
		} else {
			return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
		}
	}

	/**
	 * 检测当前用户是否为管理员
	 * @return boolean true-管理员，false-非管理员
	 */
	public static function is_administrator($uid = null) {
		$uid = is_null($uid) ? is_login() : $uid;
		return $uid && (intval($uid) === C('USER_ADMINISTRATOR'));
	}

	/**
	 * 根据用户ID获取用户名
	 * @param  integer $uid 用户ID
	 * @return string       用户名
	 */
	public static function get_username($uid = 0) {
		static $list;
		if (!($uid && is_numeric($uid))) {
			//获取当前登录用户名
			return session('user_auth.username');
		}

		/* 获取缓存数据 */
		if (empty($list)) {
			$list = S('sys_active_user_list');
		}

		/* 查找用户信息 */
		$key = "u{$uid}";
		if (isset($list[$key])) {
			//已缓存，直接使用
			$name = $list[$key];
		} else {
			//调用接口获取用户信息
			$User = new User\Api\UserApi();
			$info = $User->info($uid);
			if ($info && isset($info[1])) {
				$name = $list[$key] = $info[1];
				/* 缓存用户 */
				$count = count($list);
				$max = C('USER_MAX_CACHE');
				while ($count-- > $max) {
					array_shift($list);
				}
				S('sys_active_user_list', $list);
			} else {
				$name = '';
			}
		}
		return $name;
	}

	/**
	 * 根据用户ID获取用户昵称
	 * @param  integer $uid 用户ID
	 * @return string       用户昵称
	 */
	public static function get_nickname($uid = 0) {
		static $list;
		if (!($uid && is_numeric($uid))) {
			//获取当前登录用户名
			return session('user_auth.username');
		}

		/* 获取缓存数据 */
		if (empty($list)) {
			$list = S('sys_user_nickname_list');
		}

		/* 查找用户信息 */
		$key = "u{$uid}";
		if (isset($list[$key])) {
			//已缓存，直接使用
			$name = $list[$key];
		} else {
			//调用接口获取用户信息
			$info = M('Member')->field('nickname')->find($uid);
			if ($info !== false && $info['nickname']) {
				$nickname = $info['nickname'];
				$name = $list[$key] = $nickname;
				/* 缓存用户 */
				$count = count($list);
				$max = C('USER_MAX_CACHE');
				while ($count-- > $max) {
					array_shift($list);
				}
				S('sys_user_nickname_list', $list);
			} else {
				$name = '';
			}
		}
		return $name;
	}
}